package com.demo.java.OD51_100.OD76;

import java.util.*;

/**
 * @author bug菌
 * @Source 公众号：猿圈奇妙屋
 * @des： 【简易内存池 2】问题-贪心算法
 * @url： https://blog.csdn.net/weixin_43970743/article/details/129259231
 */
public class OdMain {
    static class MemoryModel {
        // 存储内存块的TreeMap
        public final TreeMap<Integer, Integer> hasRequestdTreeMap;

        public MemoryModel() {
            hasRequestdTreeMap = new TreeMap<>();
        }

        // 内存请求处理
        public String request(int length) {
            int defaultHeadAddress = 0; // 默认起始地址为0
            int haedAddress = defaultHeadAddress;

            // 如果请求的长度无效，返回错误
            if (length > 100 || length <= 0) {
                return "error";
            }

            // 如果内存池为空，则直接分配
            if (hasRequestdTreeMap.isEmpty()) {
                hasRequestdTreeMap.put(defaultHeadAddress, length);
            } else {
                // 遍历内存池，查找空闲的位置
                List<Integer> headList = new ArrayList<>(hasRequestdTreeMap.keySet());
                for (Integer integer : headList) {
                    // 找到第一个满足条件的位置
                    if (integer - haedAddress >= length) {
                        hasRequestdTreeMap.put(haedAddress, haedAddress + length);
                    } else {
                        haedAddress = hasRequestdTreeMap.get(integer);
                    }
                }

                // 如果内存池中没有足够的空闲空间，则返回错误
                int addressDefaultEnd = 100;
                if (addressDefaultEnd - haedAddress >= length) {
                    hasRequestdTreeMap.put(haedAddress, haedAddress + length);
                } else {
                    return "error";
                }
            }

            return String.valueOf(haedAddress);
        }

        // 内存释放处理
        boolean release(int startAddress) {
            // 如果内存池为空，直接返回错误
            if (hasRequestdTreeMap == null) {
                return false;
            }

            // 尝试移除内存池中的对应内存块
            if (hasRequestdTreeMap.containsKey(startAddress)) {
                hasRequestdTreeMap.remove(startAddress);
                return true;
            }
            return false;
        }
    }

    public static void main(String[] args) {
        try {
            Scanner s = new Scanner(System.in);
            MemoryModel memoryModel = new MemoryModel();

            // 输入行数
            int line = Integer.parseInt(s.nextLine());

            // 初始化存储输入的操作
            String[][] lines = new String[line][2];
            for (int j = 0; j < line; ++j) {
                lines[j] = s.nextLine().split("=");
                if (lines[j][0].startsWith("REQUEST")) {
                    System.out.println(memoryModel.request(Integer.parseInt(lines[j][1])));
                } else {
                    boolean result = memoryModel.release(Integer.parseInt(lines[j][1]));
                    if (!result) {
                        System.out.println("error");
                    }
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("error");
        }
    }
}